package 系统复习.面试题.数组_字符串;

/**
 * 给你一个字符数组 s ，反转其中 单词 的顺序。
 * 单词 的定义为：单词是一个由非空格字符组成的序列。s 中的单词将会由单个空格分隔。
 * 必须设计并实现 原地 解法来解决此问题，即不分配额外的空间。
 *
 * 原地置换没写出来
 */
public class L186 {

    public void reverseWords(char[] s) {
        reverseWord(s, 0, s.length - 1);
        int index = 0;
        for (int i = 0; i < s.length; i++) {
            if (s[i] == ' ') {
                reverseWord(s, index, i - 1);
                index = i + 1;
            }
        }

        reverseWord(s, index, s.length - 1);

    }

    public void reverseWord(char[] s, int start, int end) {

        for (int i = 0; i <= (end - start) / 2; i++) {
            char temp = s[i + start];
            s[i + start] = s[end - i];
            s[end - i] = temp;
        }
    }

    public static void main(String[] args) {
        L186 l186 = new L186();
        char[] chars = new char[]{'t','h','e',' ','s','k','y',' ','i','s',' ','b','l','u','e'};
        l186.reverseWords(chars);
        for (char aChar : chars) {
            System.out.print(aChar);
        }
    }

}
